package com.shujia.mvc2.dao;

import com.shujia.mvc2.User;

import java.sql.*;

/**
 * 数据库访问层
 * <p>
 * 和数据库交互
 */
public class UserMysqlDao implements UserDao {

    //私有全局变量
    private static Connection con;

    /*
     * 静态代码块
     * 在类加载的时候执行
     */
    static {
        System.out.println("daoMydql实现类");

        try {
            //1、加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2、建立连接
            con = DriverManager.getConnection("jdbc:mysql://master:3306/shujia", "root", "123456");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过用户查询用户
     * 如果用户存在返回对应的用户和密码，如果不存在返回null
     *
     */
    public User queryUserByUsername(String username) {

        User user = null;

        try {
            //1、通过用户名查询用户
            PreparedStatement ps = con.prepareStatement("select username,password from user where username=?");

            //2、将用户名传参
            ps.setString(1, username);

            //3、执行sql
            ResultSet rs = ps.executeQuery();

            //4、解析数据
            if (rs.next()) {
                String username1 = rs.getString("username");
                String password = rs.getString("password");

                user = new User(username1, password);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //5、返回
        return user;
    }


    /**
     * 将用户插入到数据库
     *
     */
    public void insert(User user) {

        try {
            //1、将用户插入到数据库
            PreparedStatement ps = con.prepareStatement("insert into user(username,password) values(?,?)");

            //2、设置参数
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());

            //3、执行sql
            ps.execute();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 修改数据库中的用户密码
     *
     */
    public void updatePasswordByUsername(String username, String newPassword) {

        try {

            //1、修改密码
            PreparedStatement ps = con.prepareStatement("update user set password=? where username=?");

            //2、设置参数
            ps.setString(1,newPassword);
            ps.setString(2,username);

            //3、执行sql
            ps.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
